package com.linkgie.galaxyframework.kvstorage;

/**
 * 键值存储的设置参数；
 * 
 * @author spring
 *
 */
public interface KVStorageSettings {

	/**
	 * 键空间分隔符；
	 * <p>
	 * 
	 * 键空间（keyspace）和键（key）通过键空间分隔符连接组成了实际存储的唯一键。
	 * <p>
	 * 
	 * 键空间（keyspace）提供了一种树状层次化的对键值数据的分类/分区管理的模型，键（key）只需要在某一个特定的键空间（keyspace）中保持唯一。
	 * <p>
	 * 
	 * 其中，键空间（keyspace）由一段字符串形式的键路径（keypath）表示， 键路径（path）由一组字符以“键路径分隔符（keypath
	 * seperator）”连接组成，其中的每一个元素称为以“ 键路径名称（keypath name）”；
	 * <p>
	 * 示例：
	 * <p>
	 * 
	 * 假设“键空间分隔符”为字符 '@'， “键路径分隔符”为字符 '/' ，<br>
	 * 
	 * 'business/user/detail@' 构成了一个 keyspace，其中 'business/user/detail' 是 keypath
	 * ，<br>
	 * 
	 * keypath 是一组路径名（path names） ['business', 'user', 'detail'] 通过键路径分隔符'/'连接而成；
	 * 
	 * @return
	 */
	char getKeyspaceSeperator();

	/**
	 * 键路径分隔符；
	 * <p>
	 * 
	 * 参考 {@link #getKeyspaceSeperator()}
	 * 
	 * @return
	 */
	char getKeypathSeperator();

//	/**
//	 * 键保留字符；
//	 * 
//	 * <p>
//	 * 
//	 * 返回除了“键空间分隔符”({@link #getKeyspaceSeperator()})和“键路径分隔符”({@link #getKeypathSeperator()})
//	 * 之外的其它保留字符；
//	 * 
//	 * <p>
//	 * 
//	 * 键值存储管理器将包含了“键保留字符”、 “键空间分隔符”({@link #getKeyspaceSeperator()})和“键路径分隔符”({@link #getKeypathSeperator()}) 的 key 或者 keyspace 识别为非法输入；
//	 * 
//	 * @return
//	 */
//	char[] getKeyReservedCharacters();

	/**
	 * 编码字符集；
	 * 
	 * keyspace 和字符串形式的 key 以指定的编码字符集序列化为字节进行存储。
	 * 
	 * @return
	 */
	String getKeyEncodingCharset();

}
